package com.xmcc.service.impl;

import com.xmcc.common.PageCommon;
import com.xmcc.dao.SysAclMapper;
import com.xmcc.dto.SysAclDto;
import com.xmcc.exception.ParamException;
import com.xmcc.pojo.SysAcl;
import com.xmcc.service.SysAclService;
import com.xmcc.utill.BeanValidator;
import com.xmcc.utill.CurrentTimeUtil;
import com.xmcc.utill.IPUtils;
import com.xmcc.utill.ThreadLocalCommon;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;


@Service
public class SysAclServiceImpl implements SysAclService {
    @Autowired
    private SysAclMapper sysAclMapper;

    //根据aclModuleId 查询acl下的数据：
    @Override
    public PageCommon<SysAcl> queryByAclModuleId(Integer aclModuleId,Integer pageSize,Integer pageNo) {
        PageCommon<SysAcl> pageCommon = new PageCommon<SysAcl>();
        pageSize = pageSize == null || pageSize < 5?5:pageSize;
        pageNo=pageNo == null || pageNo < 0?1:pageNo;
        //查询总数:
        long totalCount = sysAclMapper.selectCountByModuleId(aclModuleId);
        if (totalCount<=0){
            return pageCommon;
        }
        int begin =(pageNo-1)*pageSize;
        List<SysAcl> aclList = sysAclMapper.selectAclByModuleId(aclModuleId,begin,pageSize);
        //设置携带数据：
        pageCommon.setPageList(aclList);
        //设置当前页：
        pageCommon.setCurPage(pageNo);
        //设置每页显示多少条：
        pageCommon.setPageSize(pageSize);
        //设置总条数：
        pageCommon.setTotalCount(totalCount);
        return pageCommon;
    }

    //添加权限点列表：
    @Override
    public void insert(SysAclDto sysAclDto) {
        //校验sysAclDto传入的属性是否为空：
        BeanValidator.check(sysAclDto);
        //判列表名程是否存在：
        checkName(sysAclDto.getName(),null);
        //组装：
        SysAcl sysAcl = SysAcl.builder().name(sysAclDto.getName()).aclModuleId(sysAclDto.getAclModuleId()).url(sysAclDto.getUrl()).
                type(sysAclDto.getType()).status(sysAclDto.getStatus()).seq(sysAclDto.getSeq()).remark(sysAclDto.getRemark()).build();

        //设置code为当前时间yyyy-MM-dd-hh:mm:ss:SS：
        sysAcl.setCode(CurrentTimeUtil.getCurrentTimeUtil());
        //设置操作者信息：
        sysAcl.setOperator(ThreadLocalCommon.popSysUser().getUsername());
        sysAcl.setOperateTime(new Date());
        sysAcl.setOperateIp(IPUtils.getIpAddress(ThreadLocalCommon.popHttpServletRequest()));
        sysAclMapper.insertSelective(sysAcl);
    }

    //添加或者修改时校对列表名称是否存在：
    private void checkName(String name, Integer id) {
        if(sysAclMapper.checkName(name,id)>0){
            throw  new ParamException("该列表名称已存在!!");
        }
    }


    //修改权限点列表：
    @Override
    public void update(SysAclDto sysAclDto) {
        //校验sysAclDto传入的属性是否为空：
        BeanValidator.check(sysAclDto);
        //判列表名程是否存在：
        checkName(sysAclDto.getName(),sysAclDto.getId());

        SysAcl sysAcl = SysAcl.builder().id(sysAclDto.getId()).name(sysAclDto.getName()).aclModuleId(sysAclDto.getAclModuleId()).url(sysAclDto.getUrl()).
                type(sysAclDto.getType()).status(sysAclDto.getStatus()).seq(sysAclDto.getSeq()).remark(sysAclDto.getRemark()).build();
        System.out.println(sysAcl.getCode());
        //设置操作者信息：
        sysAcl.setOperator(ThreadLocalCommon.popSysUser().getUsername());
        sysAcl.setOperateTime(new Date());
        sysAcl.setOperateIp(IPUtils.getIpAddress(ThreadLocalCommon.popHttpServletRequest()));
        sysAclMapper.updateByPrimaryKeySelective(sysAcl);
    }

    //根据url查询到aclId：
    @Override
    public List<SysAcl> queryAclByUrl(String url) {
        return  sysAclMapper.queryAclByUrl(url);
    }
}
